home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / EXCEPT.68K < prev    next >
Text File  |  2001-09-30  |  9KB  |  291 lines

  1. ;EXCEPT.68K    APR-09-89
  2. ;Error handler for unassigned exception vectors.
  3.  
  4. ;WARNINGS:
  5. ;This assumes that there are no user vectors (locs $100 thru $3FF), thus
  6. ; this will not work on the Stride.
  7. ; This is set up to restart Apex when the Mac's interrupt button is
  8. ; pressed.
  9.  
  10.     NOLIST
  11.     INCLUDE    SYSPAG        ;get Apex system parameters
  12.     LIST
  13.  
  14.     ORG    0
  15.  
  16. ;EXCEPTION VECTORS:
  17.     DC.L    TABLE+0        ;0 Reset: Initial Interrupt Stack Ptr
  18.     DC.L    TABLE+2        ;1 Reset: Initial Program Counter
  19.     DC.L    TABLE+4        ;2 Bus Error
  20.     DC.L    TABLE+6        ;3 Address Error
  21.     DC.L    TABLE+8        ;4 Illegal Instruction
  22.     DC.L    TABLE+10    ;5 Divide by Zero
  23.     DC.L    TABLE+12    ;6 CHK, CHK2 Instruction
  24.     DC.L    TABLE+14    ;7 cpTRAPcc, TRAPcc, TRAPV Instructions
  25.     DC.L    TABLE+16    ;8 Privilege Violation
  26.     DC.L    TABLE+18    ;9 Trace
  27.     DC.L    TABLE+20    ;10 Line 1010 Emulator
  28.     DC.L    TABLE+22    ;11 Line 1111 Emulator
  29.     DC.L    TABLE+24    ;12 (Unassigned Reserved)
  30.     DC.L    TABLE+26    ;13 Coprocessor Protocol Violation
  31.     DC.L    TABLE+28    ;14 Format error
  32.     DC.L    TABLE+30    ;15 Uninitialized Interrupt
  33.     DC.L    TABLE+32    ;16 (Unassigned Reserved)
  34.     DC.L    TABLE+34    ;17 (Unassigned Reserved)
  35.     DC.L    TABLE+36    ;18 (Unassigned Reserved)
  36.     DC.L    TABLE+38    ;19 (Unassigned Reserved)
  37.     DC.L    TABLE+40    ;20 (Unassigned Reserved)
  38.     DC.L    TABLE+42    ;21 (Unassigned Reserved)
  39.     DC.L    TABLE+44    ;22 (Unassigned Reserved)
  40.     DC.L    TABLE+46    ;23 (Unassigned Reserved)
  41.     DC.L    TABLE+48    ;24 Spurious Interrupt
  42.     DC.L    TABLE+50    ;25 Level 1 Interrupt Auto Vector
  43.     DC.L    TABLE+52    ;26 Level 2 Interrupt Auto Vector
  44.     DC.L    TABLE+54    ;27 Level 3 Interrupt Auto Vector
  45.     DC.L    TABLE+56    ;28 Level 4 Interrupt Auto Vector
  46.     DC.L    TABLE+58    ;29 Level 5 Interrupt Auto Vector
  47.     DC.L    TABLE+60    ;30 Level 6 Interrupt Auto Vector
  48.     DC.L    TABLE+62    ;31 Level 7 Interrupt Auto Vector
  49.     DC.L    TABLE+64    ;32 Trap #0 Instruction Vector
  50.     DC.L    TABLE+66    ;33 Trap #1 Instruction Vector
  51.     DC.L    TABLE+68    ;34 Trap #2 Instruction Vector
  52.     DC.L    TABLE+70    ;35 Trap #3 Instruction Vector
  53.     DC.L    TABLE+72    ;36 Trap #4 Instruction Vector
  54.     DC.L    TABLE+74    ;37 Trap #5 Instruction Vector
  55.     DC.L    TABLE+76    ;38 Trap #6 Instruction Vector
  56.     DC.L    TABLE+78    ;39 Trap #7 Instruction Vector
  57.     DC.L    TABLE+80    ;40 Trap #8 Instruction Vector
  58.     DC.L    TABLE+82    ;41 Trap #9 Instruction Vector
  59.     DC.L    TABLE+84    ;42 Trap #A Instruction Vector
  60.     DC.L    TABLE+86    ;43 Trap #B Instruction Vector
  61.     DC.L    TABLE+88    ;44 Trap #C Instruction Vector
  62.     DC.L    TABLE+90    ;45 Trap #D Instruction Vector
  63.     DC.L    TABLE+92    ;46 Trap #E Instruction Vector
  64.     DC.L    TABLE+94    ;47 Trap #F Instruction Vector
  65.     DC.L    TABLE+96    ;48 FPCP BRA or SET on Unordered Cond
  66.     DC.L    TABLE+98    ;49 FPCP Inexact Result
  67.     DC.L    TABLE+100    ;50 FPCP Divide by Zero
  68.     DC.L    TABLE+102    ;51 FPCP Underflow
  69.     DC.L    TABLE+104    ;52 FPCP Operand Error
  70.     DC.L    TABLE+106    ;53 FPCP Overflow
  71.     DC.L    TABLE+108    ;54 FPCP Signaling NAN
  72.     DC.L    TABLE+110    ;55 (Unassigned Reserved)
  73.     DC.L    TABLE+112    ;56 PMMU Configuration
  74.     DC.L    TABLE+114    ;57 PMMU Illegal Operation
  75.     DC.L    TABLE+116    ;58 PMMU Access Level Violation
  76.     DC.L    TABLE+118    ;59 (Unassigned Reserved)
  77.     DC.L    TABLE+120    ;60 (Unassigned Reserved)
  78.     DC.L    TABLE+122    ;61 (Unassigned Reserved)
  79.     DC.L    TABLE+124    ;62 (Unassigned Reserved)
  80.     DC.L    TABLE+126    ;63 (Unassigned Reserved)
  81.  
  82. ;Long branches:
  83. BUSERR    BRA    BUSER
  84. ADDRERR    BRA    ADDRER
  85. ILLERR    BRA    ILLER
  86. DIVERR    BRA    DIVER
  87. CHKERR    BRA    CHKER
  88. TRPVERR    BRA    TRPVER
  89. PRIVERR    BRA    PRIVER
  90. TRACERR    BRA    TRACER
  91. LINAERR    BRA    LINAER
  92. LINFERR    BRA    LINFER
  93. INTERR    BRA    INTER
  94. INTBUTT    BRA    INTBUT
  95. TRAPERR    BRA    TRAPER
  96.  
  97. ;
  98. ;Jump table. The "return address" pushed on the stack by the BSR.S
  99. ; instruction is used to specify the entry.
  100. ;
  101. TABLE    NOP            ;0 Reset: Initial Interrupt Stack Ptr
  102.     BSR.S    MISCERR        ;1 Reset: Initial Program Counter
  103.     BSR.S    BUSERR        ;2 Bus Error
  104.     BSR.S    ADDRERR        ;3 Address Error
  105.     BSR.S    ILLERR        ;4 Illegal Instruction
  106.     BSR.S    DIVERR        ;5 Divide by Zero
  107.     BSR.S    CHKERR        ;6 CHK, CHK2 Instruction
  108.     BSR.S    TRPVERR        ;7 cpTRAPcc, TRAPcc, TRAPV Instructions
  109.     BSR.S    PRIVERR        ;8 Privilege Violation
  110.     BSR.S    TRACERR        ;9 Trace
  111.     BSR.S    LINAERR        ;10 Line 1010 Emulator
  112.     BSR.S    LINFERR        ;11 Line 1111 Emulator
  113.     BSR.S    MISCERR        ;12 (Unassigned Reserved)
  114.     BSR.S    MISCERR        ;13 Coprocessor Protocol Violation
  115.     BSR.S    MISCERR        ;14 Format error
  116.     BSR.S    MISCERR        ;15 Uninitialized Interrupt
  117.     BSR.S    MISCERR        ;16 (Unassigned Reserved)
  118.     BSR.S    MISCERR        ;17 (Unassigned Reserved)
  119.     BSR.S    MISCERR        ;18 (Unassigned Reserved)
  120.     BSR.S    MISCERR        ;19 (Unassigned Reserved)
  121.     BSR.S    MISCERR        ;20 (Unassigned Reserved)
  122.     BSR.S    MISCERR        ;21 (Unassigned Reserved)
  123.     BSR.S    MISCERR        ;22 (Unassigned Reserved)
  124.     BSR.S    MISCERR        ;23 (Unassigned Reserved)
  125.     BSR.S    MISCERR        ;24 Spurious Interrupt
  126.     BSR.S    INTERR        ;25 Level 1 Interrupt Auto Vector
  127.     BSR.S    INTERR        ;26 Level 2 Interrupt Auto Vector
  128.     BSR.S    INTERR        ;27 Level 3 Interrupt Auto Vector
  129.     BSR.S    INTERR        ;28 Level 4 Interrupt Auto Vector
  130.     BSR.S    INTERR        ;29 Level 5 Interrupt Auto Vector
  131.     BSR.S    INTERR        ;30 Level 6 Interrupt Auto Vector
  132.     BSR.S    INTBUTT        ;31 Level 7 Interrupt Auto Vector
  133.     BSR.S    TRAPERR        ;32 Trap #0 Instruction Vector
  134.     BSR.S    TRAPERR        ;33 Trap #1 Instruction Vector
  135.     BSR.S    TRAPERR        ;34 Trap #2 Instruction Vector
  136.     BSR.S    TRAPERR        ;35 Trap #3 Instruction Vector
  137.     BSR.S    TRAPERR        ;36 Trap #4 Instruction Vector
  138.     BSR.S    TRAPERR        ;37 Trap #5 Instruction Vector
  139.     BSR.S    TRAPERR        ;38 Trap #6 Instruction Vector
  140.     BSR.S    TRAPERR        ;39 Trap #7 Instruction Vector
  141.     BSR.S    TRAPERR        ;40 Trap #8 Instruction Vector
  142.     BSR.S    TRAPERR        ;41 Trap #9 Instruction Vector
  143.     BSR.S    TRAPERR        ;42 Trap #A Instruction Vector
  144.     BSR.S    TRAPERR        ;43 Trap #B Instruction Vector
  145.     BSR.S    TRAPERR        ;44 Trap #C Instruction Vector
  146.     BSR.S    TRAPERR        ;45 Trap #D Instruction Vector
  147.     BSR.S    TRAPERR        ;46 Trap #E Instruction Vector
  148.     BSR.S    TRAPERR        ;47 Trap #F Instruction Vector
  149.     BSR.S    MISCERR        ;48 FPCP BRA or SET on Unordered Cond
  150.     BSR.S    MISCERR        ;49 FPCP Inexact Result
  151.     BSR.S    MISCERR        ;50 FPCP Divide by Zero
  152.     BSR.S    MISCERR        ;51 FPCP Underflow
  153.     BSR.S    MISCERR        ;52 FPCP Operand Error
  154.     BSR.S    MISCERR        ;53 FPCP Overflow
  155.     BSR.S    MISCERR        ;54 FPCP Signaling NAN
  156.     BSR.S    MISCERR        ;55 PMMU Configuration
  157.     BSR.S    MISCERR        ;56 PMMU Illegal Operation
  158.     BSR.S    MISCERR        ;57 PMMU Access Level Violation
  159.     BSR.S    MISCERR        ;58 (Unassigned Reserved)
  160.     BSR.S    MISCERR        ;59 (Unassigned Reserved)
  161.     BSR.S    MISCERR        ;60 (Unassigned Reserved)
  162.     BSR.S    MISCERR        ;61 (Unassigned Reserved)
  163.     BSR.S    MISCERR        ;62 (Unassigned Reserved)
  164.     BSR.S    MISCERR        ;63 (Unassigned Reserved)
  165.     NOP            ;Required for short branch
  166.  
  167. ;
  168. ;Miscellaneous exception error handler
  169. ;
  170. MISCERR    MOVE.L    (SP)+,D0    ;Pop PC (return address)
  171.     SUBI.L    #TABLE,D0    ;Vector number =
  172.     ASR.L    #1,D0        ; (PC - TABLE) >>1 -1
  173.     SUBQ.L    #1,D0
  174.     DIVU    #10,D0        ;Store vector number into error
  175.     ORI.W    #'0',D0        ; message
  176.     MOVE.B    D0,ERR20-2
  177.     SWAP    D0
  178.     ORI.W    #'0',D0
  179.     MOVE.B    D0,ERR20-1
  180.  
  181.     ST    ERRTRAP        ;Always trap
  182.     JSR    VERROR
  183.     ASCII    '- EXCEPTION NO. __'
  184. ERR20    DC.B    0
  185.     JMP    VRELOD        ;(For safety)
  186.  
  187. ;
  188. ;Unassigned interrupt handler
  189. ;
  190. INTER    MOVE.L    (SP)+,D0    ;Pop PC (return address)
  191.     SUBI.W    #TABLE,D0    ;Interrupt auto vector number =
  192.     ASR.W    #1,D0        ; (PC - TABLE) >>1 -1 -25 +1
  193.     SUBI.W    #25,D0
  194.  
  195.     ANDI.B    #$0F,D0        ;Store interrupt auto vector number into
  196.     ORI.B    #$30,D0        ; error message
  197.     MOVE.B    D0,INT20-1
  198.  
  199. ;    ANDI    #$F8FF,SR    ;Re-enable interrupts (to flash cursor)
  200.     ST    ERRTRAP        ;Always trap
  201.     JSR    VERROR
  202.     ASCII    '- UNASSIGNED INTERRUPT AT LEVEL _'
  203. INT20    DC.B    0
  204.     JMP    VRELOD        ;(For safety)
  205.  
  206. ;
  207. ;Interrupt button handler (level 7)
  208. ;
  209. INTBUT
  210. ;    ANDI    #$F8FF,SR    ;Re-enable interrupts (to flash cursor)
  211.     JMP    VRELOD        ;Go to Apex
  212.  
  213. ;
  214. ;Unassigned trap handler
  215. ;
  216. TRAPER    MOVE.L    (SP)+,D0    ;Pop PC (return address)
  217.     SUBI.W    #TABLE,D0    ;Trap number =
  218.     ASR.W    #1,D0        ; (PC - TABLE) >>1 -1 -32
  219.     SUBI.W    #1+32,D0
  220.  
  221.     MOVE.B    HEXTBL-@-2(PC,D0.W),TRAP20-1
  222.                 ;Store trap number into error message
  223.     ST    ERRTRAP        ;Always trap
  224.     JSR    VERROR
  225.     ASCII    '- UNASSIGNED TRAP #$_'
  226. TRAP20    DC.B    0
  227.     JMP    VRELOD        ;(For safety)
  228.  
  229. HEXTBL    ASCII    '0123456789ABCDEF'
  230.  
  231. ;
  232. ;Other exception error handlers
  233. ;
  234. BUSER    ST    ERRTRAP        ;Always trap
  235.     JSR    VERROR
  236.     ASCII    '- BUS EXCEPTION'
  237.     DC.B    0
  238.  
  239. ADDRER    ST    ERRTRAP        ;Always trap
  240.     JSR    VERROR
  241.     ASCII    '- ADDRESS EXCEPTION'
  242.     DC.B    0
  243.  
  244. ILLER    ST    ERRTRAP        ;Always trap
  245.     JSR    VERROR
  246.     ASCII    '- ILLEGAL INSTRUCTION EXCEPTION'
  247.     DC.B    0
  248.  
  249. DIVER    ST    ERRTRAP        ;Always trap
  250.     JSR    VERROR
  251.     ASCII    '- DIVIDE BY ZERO EXCEPTION'
  252.     DC.B    0
  253.  
  254. CHKER    ST    ERRTRAP        ;Always trap
  255.     JSR    VERROR
  256.     ASCII    '- CHK INSTRUCTION EXCEPTION'
  257.     DC.B    0
  258.  
  259. TRPVER    ST    ERRTRAP        ;Always trap
  260.     JSR    VERROR
  261.     ASCII    '- TRAPV INSTRUCTION EXCEPTION'
  262.     DC.B    0
  263.  
  264. PRIVER    ST    ERRTRAP        ;Always trap
  265.     JSR    VERROR
  266.     ASCII    '- PRIVILEGE VIOLATION EXCEPTION'
  267.     DC.B    0
  268.  
  269. TRACER    ST    ERRTRAP        ;Always trap
  270.     JSR    VERROR
  271.     ASCII    '- TRACE EXCEPTION'
  272.     DC.B    0
  273.  
  274. LINAER    ST    ERRTRAP        ;Always trap
  275.     JSR    VERROR
  276.     ASCII    '- LINE 1010 EXCEPTION'
  277.     DC.B    0
  278.  
  279. LINFER    ST    ERRTRAP        ;Always trap
  280.     JSR    VERROR
  281.     ASCII    '- LINE 1111 EXCEPTION'
  282.     DC.B    0
  283.     JMP    VRELOD        ;(For safety)
  284.  
  285.  
  286.     IF @ > $400
  287.     ERROR -- TOO BIG
  288.     ENDIF
  289.  
  290.     END
  291. RO